package sgsi.controller.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import sgsi.controller.dao.UbicacionDao;
import sgsi.model.entidades.espacios.Ubicacion;

public class UbicacionDaoHibernateImpl extends HibernateDaoSupport implements
		UbicacionDao {

	private static final String BUSCAR_POR_CODIGO_AREA = "select u from Ubicacion u where u.estaBorrado is false and u.area.codigoArea = ?";
	private static final String BUSCAR_POR_CODIGO = "select u from Ubicacion u where u.estaBorrado is false and u.codigoUbicacion = ?";;
	private static final String BUSCAR_TODOS       = "select u from Ubicacion u where u.estaBorrado is false and nombre like ";
	private static final String AREA    = " u.area = ";
	private static final String ALMACEN = " u.area in (SELECT a.codigoArea FROM Area a where a.almacen = ";
	private static final String OBTENER_TODOS = "select u from Ubicacion u where u.estaBorrado is false order by u.codigoUbicacion";

	@SuppressWarnings("unchecked")
	public List<Ubicacion> obtenerTodas() {
		return getHibernateTemplate().find(OBTENER_TODOS);
	}
	
	public Ubicacion guardar(Ubicacion ubicacion) {
		getHibernateTemplate().saveOrUpdate(ubicacion);
		return null;
	}
	
	@SuppressWarnings("unchecked")
	public List<Ubicacion> obtenerPorCodigoArea(int codigo) {
		return getHibernateTemplate().find(BUSCAR_POR_CODIGO_AREA, codigo);
	}

	public Ubicacion obtenerPorCodigo(int codigo) {
		if (getHibernateTemplate().find(BUSCAR_POR_CODIGO,	codigo).isEmpty()) {
			return null;
		}
		return (Ubicacion) getHibernateTemplate().find(BUSCAR_POR_CODIGO,codigo).get(0);
	}

	@SuppressWarnings("unchecked")
	public List<Ubicacion> obtenerTodosBusqueda(String nombre,
			int areaSeleccionada, int almacenSeleccionada) {
		String newQuery = BUSCAR_TODOS + "'%" + nombre + "%'";
		if(areaSeleccionada > 0){
			newQuery = newQuery + " AND " + AREA + areaSeleccionada;
		}else{
			if(almacenSeleccionada > 0){
				newQuery = newQuery + " AND " + ALMACEN + almacenSeleccionada + ")";
			}
		}
		return getHibernateTemplate().find( newQuery );
	}

}
